﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using System.Data.SqlClient;

namespace QLMBMT
{
    public partial class FrmQLNhanVien : DevExpress.XtraEditors.XtraForm
    {
        // Khai báo
        int sua = 0;
        private DataSet ds = new DataSet();
        private DataTable dt = new DataTable();
        private SqlDataAdapter da = new SqlDataAdapter();
        private SqlCommand com = new SqlCommand();
        classConnection _classConnection = new classConnection();

        // Hàm đưa dữ liệu lên các Lookup Edit và Data GridView
        public void LoadData()
        {
            com = new SqlCommand("Select * from CHUC_VU", _classConnection.con);
            da = new SqlDataAdapter();
            ds = new DataSet();
            da.SelectCommand = com;
            da.Fill(ds);
            lupChucvu.Properties.DataSource = ds.Tables[0];
            GridLookUpEdit_Chucvu.DataSource = ds.Tables[0];

            // Đổ dữu liệu vào data gridview
            com = new SqlCommand("Select * from NHAN_VIEN", _classConnection.con);
            da = new SqlDataAdapter();
            da.SelectCommand = com;
            ds = new DataSet();
            da.Fill(ds);
            dgNhanvien.DataSource = ds.Tables[0];

            txtMaNV.DataBindings.Clear();
            txtMaNV.DataBindings.Add("EditValue", dgNhanvien.DataSource, "MaNhanVien");
            lupChucvu.DataBindings.Clear();
            lupChucvu.DataBindings.Add("EditValue", dgNhanvien.DataSource, "MaChucVu");
            txtHoten.DataBindings.Clear();
            txtHoten.DataBindings.Add("EditValue", dgNhanvien.DataSource, "TenNhanVien");
            txtPass.DataBindings.Clear();
            txtPass.DataBindings.Add("EditValue", dgNhanvien.DataSource, "Password");
            dateNgaySinh.DataBindings.Clear();
            dateNgaySinh.DataBindings.Add("EditValue", dgNhanvien.DataSource, "Ngaysinh");
            txtNoisinh.DataBindings.Clear();
            txtNoisinh.DataBindings.Add("EditValue", dgNhanvien.DataSource, "Noisinh");
            cboGioitinh.DataBindings.Clear();
            cboGioitinh.DataBindings.Add("EditValue", dgNhanvien.DataSource, "GioiTinh");
            txtDiachi.DataBindings.Clear();
            txtDiachi.DataBindings.Add("EditValue", dgNhanvien.DataSource, "DiaChi");
            txtSoCMND.DataBindings.Clear();
            txtSoCMND.DataBindings.Add("EditValue", dgNhanvien.DataSource, "SoCMND");
            dateNgayvaolam.DataBindings.Clear();
            dateNgayvaolam.DataBindings.Add("EditValue", dgNhanvien.DataSource, "NgayVaoLam");

            // Thiết lập trạng thái cho các control
            btnThem.Enabled = true;
            btnSua.Enabled = true;
            btnXoa.Enabled = true;
            btnLuu.Enabled = false;
            btnHuy.Enabled = false;
            btnThoat.Enabled = true;
            dgNhanvien.Enabled = true;

            txtMaNV.Properties.ReadOnly = true;
            txtHoten.Properties.ReadOnly = true;
            txtPass.Properties.ReadOnly = true;
            txtDiachi.Properties.ReadOnly = true;
            txtNoisinh.Properties.ReadOnly = true;
            txtSoCMND.Properties.ReadOnly = true;
            lupChucvu.Properties.ReadOnly = true;
            cboGioitinh.Properties.ReadOnly = true;
            dateNgayvaolam.Properties.ReadOnly = true;
            dateNgaySinh.Properties.ReadOnly = true;
            dgNhanvien.Enabled = true;
        }


      
        public FrmQLNhanVien()
        {
            InitializeComponent();
            _classConnection.KetNoiCSDL();
        }

        private void FrmQLNhanVien_Load(object sender, EventArgs e)
        {
            LoadData();
        }

        // Xử lí sự kiện Click của nút "Thêm"
        private void btnThem_Click(object sender, EventArgs e)
        {

            // Thiết lập trạng thái cho các control
            //dateNgaySinh.EditValue = "01/01/1950";
            dateNgaySinh.Properties.MaxValue = new DateTime(1996, 12, 31);
            dateNgayvaolam.EditValue = System.DateTime.Today.Date;
            btnThem.Enabled = false;
            btnSua.Enabled = false;
            btnXoa.Enabled = false;
            btnLuu.Enabled = true;
            btnHuy.Enabled = true;
            btnThoat.Enabled = true;

            txtMaNV.ResetText();
            txtHoten.ResetText();
            txtNoisinh.ResetText();
            txtPass.ResetText();
            txtDiachi.ResetText();
            txtSoCMND.ResetText();
            cboGioitinh.ResetText();
            lupChucvu.EditValue = null;
            dateNgaySinh.ResetText();
            dateNgayvaolam.ResetText();

            txtMaNV.Properties.ReadOnly = false;
            txtHoten.Properties.ReadOnly = false;
            txtPass.Properties.ReadOnly = false;
            txtDiachi.Properties.ReadOnly = false;
            txtNoisinh.Properties.ReadOnly = false;
            txtSoCMND.Properties.ReadOnly = false;
            lupChucvu.Properties.ReadOnly = false;
            cboGioitinh.Properties.ReadOnly = false;
            dateNgayvaolam.Properties.ReadOnly = false;
            dateNgaySinh.Properties.ReadOnly = false;
            dgNhanvien.Enabled = false;
            
        }

        // Xử lí sự kiện Click của nút "Thoát"
        private void btnThoat_Click(object sender, EventArgs e)
        {
            this.Close();
            _classConnection.con.Close();
        }

        // Xử lí sự kiện Click của nút "Hủy"
        private void btnHuy_Click(object sender, EventArgs e)
        {
            LoadData();
        }

        // Xử lí sự kiện Click của nút "Xóa"
        private void btnXoa_Click(object sender, EventArgs e)
        {
            // Thiết lập trạng thái cho các control
            btnThem.Enabled = false;
            btnSua.Enabled = false;
            btnXoa.Enabled = false;
            btnLuu.Enabled = true;
            btnHuy.Enabled = true;
            btnThoat.Enabled = true;

            if (MessageBox.Show("Ban co chac chan muon xoa?", "Thong bao", MessageBoxButtons.YesNo) == DialogResult.Yes)
            {
                SqlCommand comm = new SqlCommand();
                comm.Connection = _classConnection.con;
                comm.CommandType = CommandType.Text;
                comm.CommandText = "Delete From NHAN_VIEN Where MANHANVIEN=@MANHANVIEN";
                comm.Parameters.Add("MANHANVIEN", SqlDbType.NVarChar).Value = txtMaNV.Text;
                comm.ExecuteNonQuery();
                MessageBox.Show("Xoa thanh cong");
                LoadData();
                
            }
        }
        
        // Xử lí sự kiện Click của nút "Sửa"
        private void btnSua_Click(object sender, EventArgs e)
        {
            // Thiết lập trạng thái cho các control
            sua = 1;
            btnThem.Enabled = false;
            btnSua.Enabled = false;
            btnXoa.Enabled = false;
            btnLuu.Enabled = true;
            btnHuy.Enabled = true;
            btnThoat.Enabled = true;

            txtMaNV.Properties.ReadOnly = true;
            txtHoten.Properties.ReadOnly = false;
            txtPass.Properties.ReadOnly = false;
            txtDiachi.Properties.ReadOnly = false;
            txtNoisinh.Properties.ReadOnly = false;
            txtSoCMND.Properties.ReadOnly = false;
            lupChucvu.Properties.ReadOnly = false;
            cboGioitinh.Properties.ReadOnly = false;
            dateNgayvaolam.Properties.ReadOnly = false;
            dateNgaySinh.Properties.ReadOnly = false;
            dgNhanvien.Enabled = false;
            //_classConnection.con.Close();

          }

        // Xử lí sự kiện Click của nút "Lưu"
        private void btnLuu_Click(object sender, EventArgs e)
        {
           // _classConnection.con.Open();
            try
            {
                // Kiểm tra các trường phải được nhập dữ liệu đầy đủ
                if (txtSoCMND.Text == "")
                {
                    MessageBox.Show("Bạn chưa nhập 'Số CMND' ", "Thông báo");
                    return;
                }
                
                if (txtPass.Text == "")
                {
                    MessageBox.Show("Bạn chưa nhập 'Password' ", "Thông báo");
                    return;
                }

                if (txtNoisinh.Text == "")
                {
                    MessageBox.Show("Bạn chưa nhập 'Nơi sinh' ", "Thông báo");
                    return;
                }

                if (txtMaNV.Text == "")
                {
                    MessageBox.Show("Bạn chưa nhập 'Mã Nhân viên' ", "Thông báo");
                    return;
                }

                if (txtHoten.Text == "")
                {
                    MessageBox.Show("Bạn chưa nhập 'Tên Nhân viên' ", "Thông báo");
                    return;
                }

                if (txtDiachi.Text == "")
                {
                    MessageBox.Show("Bạn chưa nhập 'Địa chỉ' ", "Thông báo");
                    return;
                }

                if (cboGioitinh.Text == "")
                {
                    MessageBox.Show("Bạn chưa nhập 'Giới tính' ", "Thông báo");
                    return;
                }


                if (lupChucvu.EditValue == null)
                {
                    MessageBox.Show("Bạn chưa nhập 'Tên Chức vụ' ", "Thông báo");
                    return;
                }

                if (dateNgaySinh.Text == "")
                {
                    MessageBox.Show("Bạn chưa nhập 'Ngày sinh' ", "Thông báo");
                    return;
                }

                if (dateNgayvaolam.Text == "")
                {
                    MessageBox.Show("Bạn chưa nhập 'Ngày vào làm' ", "Thông báo");
                    return;
                }

                              

                if ( sua == 0)
                {
                    // Kiểm tra Mã nhân viên đã tồn tại hay chưa khi thêm mới một nhân viên vào cơ sở dữ liệu
                    SqlCommand comm = new SqlCommand();
                    comm.Connection = _classConnection.con;
                    comm.CommandType = CommandType.Text;
                    comm.CommandText = "Select * From NHAN_VIEN Where MANHANVIEN=@MANHANVIEN";
                    comm.Parameters.Add("MANHANVIEN", SqlDbType.VarChar).Value = txtMaNV.Text;
                    comm.ExecuteNonQuery();
                    da = new SqlDataAdapter();
                    ds = new DataSet();
                    da.SelectCommand = comm;
                    da.Fill(ds);
                    dt = ds.Tables[0];
                    if (dt != null && dt.Rows.Count > 0)
                    {
                        MessageBox.Show("Đã tồn tại nhân viên có mã '" + txtMaNV.Text.ToUpper() + "'! \nVui lòng kiểm tra lại!");
                        return;
                    }
                  
                    // Thêm dữ liệu vào CSDL
                    com = _classConnection.con.CreateCommand();
                    com.CommandText = "Insert Into NHAN_VIEN Values(@MANHANVIEN,@MACHUCVU,@PASSWORD,@TENNHANVIEN,@NGAYSINH,@NOISINH,@GIOITINH,@DIACHI,@SOCMND,@NGAYVAOLAM)";

                    com.Parameters.Add("@MANHANVIEN", SqlDbType.VarChar).Value = txtMaNV.EditValue;
                    com.Parameters.Add("@PASSWORD", SqlDbType.VarChar).Value = txtPass.EditValue;
                    com.Parameters.Add("@MACHUCVU", SqlDbType.NVarChar).Value= lupChucvu.EditValue;
                    com.Parameters.Add("@TENNHANVIEN", SqlDbType.VarChar).Value= txtHoten.EditValue;
                    com.Parameters.Add("@NGAYSINH", SqlDbType.Date).Value = dateNgaySinh.DateTime.Date;
                    com.Parameters.Add("@NOISINH", SqlDbType.VarChar).Value = txtNoisinh.EditValue;
                    com.Parameters.Add("@GIOITINH", SqlDbType.VarChar).Value= cboGioitinh.EditValue;
                    com.Parameters.Add("@DIACHI", SqlDbType.VarChar).Value=txtDiachi.EditValue;
                    com.Parameters.Add("@SOCMND", SqlDbType.Char).Value=txtSoCMND.EditValue;
                    com.Parameters.Add("@NGAYVAOLAM", SqlDbType.Date).Value= dateNgayvaolam.DateTime.Date;
                    com.ExecuteNonQuery();
                    
                    MessageBox.Show("Đã thêm nhân viên vào thành công!", "Thông báo", MessageBoxButtons.OK,MessageBoxIcon.Information);
                    
                }
                else
                {
                    // Cập nhật dữ liệu của CSDL
                    txtMaNV.Properties.ReadOnly = true;
                    com = _classConnection.con.CreateCommand();
                    com.CommandText = "Update NHAN_VIEN set MACHUCVU = @MACHUCVU, PASSWORD= @PASSWORD, TENNHANVIEN = @TENNHANVIEN,NGAYSINH = @NGAYSINH,NOISINH = @NOISINH, GIOITINH = @GIOITINH, DIACHI = @DIACHI, SOCMND = @SOCMND, NGAYVAOLAM = @NGAYVAOLAM where MANHANVIEN=@MANHANVIEN";

                    com.Parameters.Add("@MANHANVIEN", SqlDbType.VarChar).Value = txtMaNV.EditValue;
                    com.Parameters.Add("@PASSWORD", SqlDbType.VarChar).Value = txtPass.EditValue;
                    com.Parameters.Add("@MACHUCVU", SqlDbType.NVarChar).Value = lupChucvu.EditValue;
                    com.Parameters.Add("@TENNHANVIEN", SqlDbType.VarChar).Value = txtHoten.EditValue;
                    com.Parameters.Add("@NGAYSINH", SqlDbType.Date).Value = dateNgaySinh.DateTime.Date;
                    com.Parameters.Add("@NOISINH", SqlDbType.VarChar).Value = txtNoisinh.EditValue;
                    com.Parameters.Add("@GIOITINH", SqlDbType.VarChar).Value = cboGioitinh.EditValue;
                    com.Parameters.Add("@DIACHI", SqlDbType.VarChar).Value = txtDiachi.EditValue;
                    com.Parameters.Add("@SOCMND", SqlDbType.Char).Value = txtSoCMND.EditValue;
                    com.Parameters.Add("@NGAYVAOLAM", SqlDbType.Date).Value = dateNgayvaolam.DateTime.Date;
                    com.ExecuteNonQuery();
                                      
                    MessageBox.Show("Đã cập nhật thông tin nhân viên!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    

                }
                LoadData();        
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + ex.StackTrace);
            }
        }

        // Code chỉ cho phép nhập số vào trường SốCMND
        private void txtSoCMND_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar))
                e.Handled = true;
        }

       

     
    }
}